/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.sgsmcan.Controlador;

import com.sgsmcan.Dao.AlarmaDaoImpl;
import com.sgsmcan.Entidad.Alarma;
import com.sgsmcan.Entidad.Modulo;
import com.sgsmcan.Entidad.Permiso;
import com.sgsmcan.Entidad.Usuario;
import com.sgsmcan.Utils.Utilitario;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.CloseEvent;

/**
 *
 * @author user
 */
@ManagedBean(name = "usuarioBean")
@SessionScoped
public class UsuarioControlador implements Serializable{
    
    private Usuario usuario;
    
    private Permiso permiso;
    
    /*variable para controlar las alarmas*/
    private boolean activar = false;
    
    int nro_notificaciones = 0;
    
    List<Permiso> modulos = new ArrayList<Permiso>();
    
    List<Alarma> alarmas = new ArrayList<Alarma>();
    
    public UsuarioControlador(){
        
    }
    
    public void generarModulo(int id){
        for(Permiso per :usuario.getRol().getPermisos()){
            if(per.getModulo().getId() == id){
                this.permiso = per;
                break;
            }
        }
    }
    
    public void ensamblarMenu(){
        modulos = new ArrayList<Permiso>();
        modulos.addAll(usuario.getRol().getPermisos());
        Collections.sort(modulos,Permiso.compararPermisos);
    }
    
    public void verificarAlarmas(){
        Timestamp fechaActual = Utilitario.getFechaActual();
        List<Alarma> auxiliar = new AlarmaDaoImpl().notificarAlarmas(); 
        for(Alarma alarma : auxiliar){
            Timestamp fechaAlarma = Utilitario.disminuirFecha(alarma.getEvento().getFechaEvento(),alarma.getDiasAnticipacion());
            if(fechaActual.after(fechaAlarma) || fechaActual.equals(fechaAlarma)){
                alarma.setFechaFormato(Utilitario.convertirFormatoFecha(alarma.getEvento().getFechaEvento(),"dd/MM/yyyy hh:mm a"));
                alarmas.add(alarma);
            }
        }
        if(!alarmas.isEmpty()){
            setNro_notificaciones(alarmas.size());
            setActivar(true);
        }
        
    }
    
    public void handleClose(CloseEvent event){
        setActivar(false);
    }
    
    
    /*  GETTER AND SETTER   */
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Permiso getPermiso() {
        return permiso;
    }

    public void setPermiso(Permiso permiso) {
        this.permiso = permiso;
    }

    public List<Permiso> getModulos() {
        return modulos;
    }

    public void setModulos(List<Permiso> modulos) {
        this.modulos = modulos;
    }

    public boolean isActivar() {
        return activar;
    }

    public void setActivar(boolean activar) {
        this.activar = activar;
    }

    public int getNro_notificaciones() {
        return nro_notificaciones;
    }

    public void setNro_notificaciones(int nro_notificaciones) {
        this.nro_notificaciones = nro_notificaciones;
    }

    public List<Alarma> getAlarmas() {
        return alarmas;
    }

    public void setAlarmas(List<Alarma> alarmas) {
        this.alarmas = alarmas;
    }

   
    
}
